﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <!-- Documenting T:NAnt.VSNet.Tasks.SolutionTask-->
  <head>
    <meta http-equiv="Content-Language" content="en-ca" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="../style.css" />
    <title>&lt;solution&gt; Task</title>
  </head>
  <body>
    <table width="100%" border="0" cellspacing="0" cellpadding="2" class="NavBar">
      <tr>
        <td class="NavBar-Cell">
          <a href="http://nant.sourceforge.net">
            <b>NAnt</b>
          </a>
          <img alt="-&gt;" src="../images/arrow.gif" />
          <a href="../index.html">Help</a>
          <img alt="-&gt;" src="../images/arrow.gif" />
          <a href="../tasks/index.html">Task Reference</a>
          <img alt="-&gt;" src="../images/arrow.gif" /> &lt;solution&gt;</td>
        <td class="NavBar-Cell" align="right">
                        v0.91</td>
      </tr>
    </table>
    <h1>&lt;solution&gt;</h1>
    <p> Compiles VS.NET solutions (or sets of projects), automatically determining project dependencies from inter-project references. </p>
    <p> This task support the following projects: </p>
    <ul style="list-style-type: disc;">
      <li>Visual Basic .NET</li>
      <li>Visual C# .NET</li>
      <li>Visual J# .NET</li>
      <li>Visual C++ .NET</li>
    </ul>
    <p class="i2">
      <b>Note:</b>  Right now, only Microsoft Visual Studio .NET 2002 and 2003 solutions and projects are supported. Support for .NET Compact Framework projects is also not available at this time. </p>
    <p> The <a href="../tasks/solution.html">&lt;solution&gt;</a> task also supports the model of referencing projects by their output filenames, rather than referencing them inside the solution. It will automatically detect the existance of a file reference and convert it to a project reference. For example, if project "A" references the file in the release output directory of project "B", the <a href="../tasks/solution.html">&lt;solution&gt;</a> task will automatically convert this to a project dependency on project "B" and will reference the appropriate configuration output directory at the final build time (ie: reference the debug version of "B" if the solution is built as debug). </p>
    <p class="i2">
      <b>Note:</b>  The <a href="../tasks/solution.html">&lt;solution&gt;</a> task expects all project files to be valid XML files. </p>
    <h3>Resx Files</h3>
    <p> When building a project for a down-level target framework, special care should be given to resx files. Resx files (can) contain references to a specific version of CLR types, and as such are only upward compatible. </p>
    <p> For example: if you want to be able to build a project both as a .NET 1.0 and .NET 1.1 assembly, the resx files should only contain references to .NET 1.0 CLR types. Failure to do this may result in a <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemInvalidCastExceptionClassTopic.asp">InvalidCastException</a> failure at runtime on machines with only the .NET Framework 1.0 installed. </p>
    <h3>Parameters</h3>
    <div class="table">
      <table>
        <tr>
          <th>Attribute</th>
          <th style="text-align: center;">Type</th>
          <th>Description</th>
          <th style="text-align: center;">Required</th>
        </tr>
        <tr>
          <td valign="top" class="required">configuration</td>
          <td style="text-align: center;">string</td>
          <td> The name of the solution configuration to build. </td>
          <td style="text-align: center;">True</td>
        </tr>
        <tr>
          <td valign="top">enablewebdav</td>
          <td style="text-align: center;">bool</td>
          <td> Allow the task to use WebDAV for retrieving/compiling the projects within solution. Use of <a href="../elements/NAnt.VSNet.Types.WebMap.html">WebMap</a> is preferred over WebDAV. The default is <b>false</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">includevsfolders</td>
          <td style="text-align: center;">bool</td>
          <td> Includes Visual Studio search folders in reference search path. The default is <b>true</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">outputdir</td>
          <td style="text-align: center;">directory</td>
          <td> The directory where compiled targets will be placed. This overrides path settings contained in the solution/project. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">platform</td>
          <td style="text-align: center;">string</td>
          <td> The name of platform to build the solution for. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">solutionfile</td>
          <td style="text-align: center;">file</td>
          <td> The name of the VS.NET solution file to build. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">failonerror</td>
          <td style="text-align: center;">bool</td>
          <td> Determines if task failure stops the build, or is just reported. The default is <b>true</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">if</td>
          <td style="text-align: center;">bool</td>
          <td> If <b>true</b> then the task will be executed; otherwise, skipped. The default is <b>true</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">unless</td>
          <td style="text-align: center;">bool</td>
          <td> Opposite of <code>if</code>. If <b>false</b> then the task will be executed; otherwise, skipped. The default is <b>false</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">verbose</td>
          <td style="text-align: center;">bool</td>
          <td> Determines whether the task should report detailed build log messages. The default is <b>false</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
      </table>
    </div>
    <h3>Nested Elements:</h3>
    <!--Element-->
    <h4>
      <a id="projects">
      </a>
                    &lt;<a href="../types/fileset.html">projects</a>&gt;
                </h4>
    <div class="nested-element"> The projects to build. <p /></div>
    <h4>
      <a id="projects">
      </a>
                    &lt;/<a href="../types/fileset.html">projects</a>&gt;
                </h4>
    <!--Element-->
    <h4>
      <a id="referenceprojects">
      </a>
                    &lt;<a href="../types/fileset.html">referenceprojects</a>&gt;
                </h4>
    <div class="nested-element"> The projects to scan, but not build. <p /></div>
    <h4>
      <a id="referenceprojects">
      </a>
                    &lt;/<a href="../types/fileset.html">referenceprojects</a>&gt;
                </h4>
    <!--Collection-->
    <h4>
      <a id="webmap">
      </a>
            &lt;webmap&gt;
        </h4>
    <div class="nested-element"> WebMap of URL's to project references. <h5>&lt;map&gt;</h5><div class="nested-element"><p> Represents a single mapping from URL project path to physical project path. </p><h3>Parameters</h3><div class="table"><table><tr><th>Attribute</th><th style="text-align: center;">Type</th><th>Description</th><th style="text-align: center;">Required</th></tr><tr><td valign="top" class="required">path</td><td style="text-align: center;">file</td><td> Specifies the actual path to the project file, or the path fragment to replace. </td><td style="text-align: center;">True</td></tr><tr><td valign="top" class="required">url</td><td style="text-align: center;">string</td><td> Specifies the URL of the project file, or a URL fragment to match. </td><td style="text-align: center;">True</td></tr><tr><td valign="top">casesensitive</td><td style="text-align: center;">bool</td><td> Specifies whether the mapping is case-sensitive or not. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">if</td><td style="text-align: center;">bool</td><td> Indicates if the URL of the project file should be mapped. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">unless</td><td style="text-align: center;">bool</td><td> Indicates if the URL of the project file should not be mapped. </td><td style="text-align: center;">False</td></tr></table></div></div><h5>&lt;/map&gt;</h5></div>
    <h4>&lt;/webmap&gt;</h4>
    <!--Element-->
    <h4>
      <a id="excludeprojects">
      </a>
                    &lt;<a href="../types/fileset.html">excludeprojects</a>&gt;
                </h4>
    <div class="nested-element"> Fileset of projects to exclude. <p /></div>
    <h4>
      <a id="excludeprojects">
      </a>
                    &lt;/<a href="../types/fileset.html">excludeprojects</a>&gt;
                </h4>
    <!--Element-->
    <h4>
      <a id="assemblyfolders">
      </a>
                    &lt;<a href="../types/fileset.html">assemblyfolders</a>&gt;
                </h4>
    <div class="nested-element"> Set of folders where references are searched when not found in path from project file (HintPath). <p /></div>
    <h4>
      <a id="assemblyfolders">
      </a>
                    &lt;/<a href="../types/fileset.html">assemblyfolders</a>&gt;
                </h4>
    <!--Array-->
    <!--NestedElementArray=T:NAnt.Core.Tasks.PropertyTask-->
    <h4>
      <a id="property">
      </a>
                    &lt;property&gt;
                </h4>
    <div class="nested-element"> Set of properties set at solution level. Builders for projects in solution may or may not use them. <p> Sets a property in the current project. </p><p class="i2"><b>Note:</b> NAnt uses a number of predefined properties.</p><h3>Parameters</h3><div class="table"><table><tr><th>Attribute</th><th style="text-align: center;">Type</th><th>Description</th><th style="text-align: center;">Required</th></tr><tr><td valign="top" class="required">name</td><td style="text-align: center;">string</td><td> The name of the NAnt property to set. </td><td style="text-align: center;">True</td></tr><tr><td valign="top" class="required">value</td><td style="text-align: center;">string</td><td> The value to assign to the NAnt property. <p style="font-weight: bold;">
                        This attribute's properties will not be automatically expanded!
                    </p></td><td style="text-align: center;">True</td></tr><tr><td valign="top">dynamic</td><td style="text-align: center;">bool</td><td> Specifies whether references to other properties should not be expanded when the value of the property is set, but expanded when the property is actually used. By default, properties will be expanded when set. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">overwrite</td><td style="text-align: center;">bool</td><td> Specifies whether the value of a property should be overwritten if the property already exists (unless the property is read-only). The default is <b>true</b>. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">readonly</td><td style="text-align: center;">bool</td><td> Specifies whether the property is read-only or not. The default is <b>false</b>. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">failonerror</td><td style="text-align: center;">bool</td><td> Determines if task failure stops the build, or is just reported. The default is <b>true</b>. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">if</td><td style="text-align: center;">bool</td><td> If <b>true</b> then the task will be executed; otherwise, skipped. The default is <b>true</b>. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">unless</td><td style="text-align: center;">bool</td><td> Opposite of <code>if</code>. If <b>false</b> then the task will be executed; otherwise, skipped. The default is <b>false</b>. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">verbose</td><td style="text-align: center;">bool</td><td> Determines whether the task should report detailed build log messages. The default is <b>false</b>. </td><td style="text-align: center;">False</td></tr></table></div><h3>Examples</h3><ul class="examples"><li><p> Define a <code>debug</code> property with value <b>true</b>. </p><pre class="code">
            &lt;property name="debug" value="true" /&gt;
                </pre></li><li><p> Use the user-defined <code>debug</code> property. </p><pre class="code">
            &lt;property name="trace" value="${debug}" /&gt;
                </pre></li><li><p> Define a read-only property. This is just like passing in the param on the command line. </p><pre class="code">
            &lt;property name="do_not_touch_ME" value="hammer" readonly="true" /&gt;
                </pre></li><li><p> Define a property, but do not overwrite the value if the property already exists (eg. it was specified on the command line). </p><pre class="code">
            &lt;project name="property-example"&gt;
              &lt;property name="debug" value="true" overwrite="false" /&gt;
              &lt;echo message="debug: ${debug}" /&gt;
            &lt;/project&gt;
                </pre><p> Executing this build file with the command line option <code>-D:debug=false</code>, would cause the value specified on the command line to remain unaltered. </p><pre class="code">
            [echo] debug: false
                </pre></li></ul></div>
    <h4>
      <a id="property">
      </a>
                    &lt;/property&gt;
                </h4>
    <h3>Examples</h3>
    <ul class="examples">
      <li>
        <p> Compiles all of the projects in <code>test.sln</code>, in release mode, in the proper order. </p>
        <pre class="code">
&lt;solution configuration="release" solutionfile="test.sln" /&gt;
    </pre>
      </li>
      <li>
        <p> Compiles all of the projects in <code>projects.txt</code>, in the proper order. </p>
        <pre class="code">
&lt;solution configuration="release"&gt;
    &lt;projects&gt;
        &lt;includesfile name="projects.txt" /&gt;
   &lt;/projects&gt;
&lt;/solution&gt;
    </pre>
      </li>
      <li>
        <p> Compiles projects A, B and C, using the output of project X as a reference. </p>
        <pre class="code">
&lt;solution configuration="release"&gt;
    &lt;projects&gt;
        &lt;include name="A\A.csproj" /&gt;
        &lt;include name="B\b.vbproj" /&gt;
        &lt;include name="C\c.csproj" /&gt;
    &lt;/projects&gt;
    &lt;referenceprojects&gt;
        &lt;include name="X\x.csproj" /&gt;
    &lt;/referenceprojects&gt;
&lt;/solution&gt;
    </pre>
      </li>
      <li>
        <p> Compiles all of the projects in the solution except for project A. </p>
        <pre class="code">
&lt;solution solutionfile="test.sln" configuration="release"&gt;
    &lt;excludeprojects&gt;
        &lt;include name="A\A.csproj" /&gt;
    &lt;/excludeprojects&gt;
&lt;/solution&gt;
    </pre>
      </li>
      <li>
        <p> Compiles all of the projects in the solution mapping the specific project at http://localhost/A/A.csproj to c:\inetpub\wwwroot\A\A.csproj and any URLs under http://localhost/B/[remainder] to c:\other\B\[remainder]. This allows the build to work without WebDAV. </p>
        <pre class="code">
&lt;solution solutionfile="test.sln" configuration="release"&gt;
    &lt;webmap&gt;
        &lt;map url="http://localhost/A/A.csproj" path="c:\inetpub\wwwroot\A\A.csproj" /&gt;
        &lt;map url="http://localhost/B" path="c:\other\B" /&gt;
    &lt;/webmap&gt;
&lt;/solution&gt;
    </pre>
      </li>
      <li>
        <p> Compiles all of the projects in the solution placing compiled outputs in <code>c:\temp</code>.</p>
        <pre class="code">
&lt;solution solutionfile="test.sln" configuration="release" outputdir="c:\temp" /&gt;
    </pre>
      </li>
    </ul>
    <h3>Requirements</h3>
    <div style="margin-left: 20px;">
      <b>Assembly:</b> NAnt.VSNetTasks (0.91.4312.0)
            </div>
  </body>
</html>